package com.share.common.utils;

import org.springframework.util.CollectionUtils;

import java.util.LinkedList;
import java.util.List;
import java.util.Random;

public class RandomUtil {
    private static Random rnd = new Random();
    private static String gennerChar = "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";

    /**
     * 返回是一个随机小数  [0,maxNum)
     * 返回值是 [0,maxNum) 的整数
     *
     * @param maxNum
     * @return 返回值是 [0,maxNum) 的整数
     */
    public static Integer getRandom(int maxNum) {
        return rnd.nextInt(maxNum);
    }

    /**
     * 从集合中随机返回几个元素
     *
     * @param list
     * @param <T>
     * @return
     */
    public static <T> List<T> randomFromList(List<T> list) {
        if (CollectionUtils.isEmpty(list)) {
            return list;
        } else {
            int size = list.size();
            List<T> tmpList = new LinkedList<>();
            //本地需要的随机个数
            Integer num = RandomUtil.getRandom(size) + 1;
            for (int i = 0; i < num; i++) {
                tmpList.add(list.get(RandomUtil.getRandom(size)));
            }
            return tmpList;
        }
    }

    /**
     * 返回是一个随机 [min,  max)
     *
     * @param min 最小值
     * @param max 最大值
     * @return 返回是一个随机 [min,  max)
     */
    public static int rangMinMax(int min, int max) {
        int up = (int) (Math.random() * (max - min));
        return min + up;
    }

    /**
     * 生成指定位数的随机数
     *
     * @param digCount
     * @return
     */
    public static String getRandomNumber(int digCount) {
        StringBuilder sb = new StringBuilder(digCount);
        for (int i = 0; i < digCount; i++)
            sb.append((char) ('0' + rnd.nextInt(10)));
        return sb.toString();
    }

    /**
     * 数字和大小写字母
     *
     * @param digCount
     * @return
     */
    public static String getRandomString(int digCount) {
        StringBuilder sb = new StringBuilder(digCount);
        int gennerCharLength = gennerChar.length();
        for (int i = 0; i < digCount; i++)
            sb.append(gennerChar.charAt(rnd.nextInt(gennerCharLength)));
        return sb.toString();
    }

    public static void main(String[] args) {
        System.out.println(getRandom(2));
    }
}
